package com.duoduo.剑指Offer;

import com.duoduo.TreeNode;

/**
 * @program: algorithm
 * @description: 对称的二叉树13
 * 请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。
 *
 * 例如，二叉树 [1,2,2,3,4,4,3] 是对称的。
 *
 *     1
 *    / \
 *   2   2
 *  / \ / \
 * 3  4 4  3
 * 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
 *
 *     1
 *    / \
 *   2   2
 *    \   \
 *    3    3
 *
 *  
 *
 * 示例 1：
 *
 * 输入：root = [1,2,2,3,4,4,3]
 * 输出：true
 *
 * @author: chaidl  ！
 * @create: 2022-05-23 23:38
 */
public class 对称的二叉树13 {
	public boolean isSymmetric(TreeNode root) {
	//	采用递归的解法
		if (root == null){
			return true;
		}
		return dfs(root.left,root.right);
	}
	
	private boolean dfs(TreeNode left, TreeNode right) {
		//左右相等
		if (left == null && right == null){
			return true;
		}
		//任何一个值为空或不相等
		if (left==null || right==null || left.val != right.val){
			return false;
		}
		//左右子树和右左子树必须都相等
		return dfs(left.left, right.right) && dfs(left.right, right.left);
	}
}
